﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using zkemkeeper;
using QUANLYCHAMCONG.BL.Entities;
using QUANLYCHAMCONG.BL.BUS;
using QUANLYCHAMCONG.BL.Entities.Import;
using QUANLYCHAMCONG.PL.CMS.Main;
using Hopthoai;
using QUANLYCHAMCONG.BL.BUS.Import;
using Microsoft.VisualBasic.CompilerServices;
using Microsoft.VisualBasic;
namespace QUANLYCHAMCONG.PL.CMS.Maychamcong
{
    public partial class Taidulieutheongay : UserControl
    {
        public Taidulieutheongay()
        {
            InitializeComponent();
        }
        MAYCHAMCONG mcc;
        string serimahoa = "";
        MAYCHAMCONGCollection dsmaychamcong;
        string mamay = "";
        bool IsConnect;
        public CZKEM AxCZKEM1 = new CZKEMClass();
        CheckInOut inout;
        CheckInOutCollection ds;
        frmHoidap thongbao;
        int flag = 0;
        string seri = "";
        private int Tongsomay()
        {
            int somgay = 0;
            DataTable dt = new DataTable();
            dt = MAYCHAMCONGBUS.SumMachineZK();
            if (dt.Rows.Count != 0)
            {
                foreach (DataRow dr in dt.Rows)
                {
                    somgay = int.Parse(dr["tongsomayzk"].ToString());
                    break;
                }
            }
            else
            {
                somgay = 0;
            }
            return somgay;
        }
        private void ConvertData(DataTable dt)
        {
            if (dt.Rows.Count != 0)
            {
                dsmaychamcong = new MAYCHAMCONGCollection();
                foreach (DataRow row in dt.Rows)
                {
                    mcc = new MAYCHAMCONG();
                    mcc.COMPORT = int.Parse(row["COMPORT"].ToString());
                    mcc.DOMAIN = row["DOMAIN"].ToString();
                    mcc.FIMWARE = row["FIMWARE"].ToString();
                    mcc.IDMAY = int.Parse(row["IDMAY"].ToString());
                    mcc.IP = row["IP"].ToString();
                    if (row["ISDOMAIN"].ToString() == "USE")
                        mcc.ISDOMAIN = true;
                    else
                        mcc.ISDOMAIN = false;
                    mcc.MALKN = row["MALKN"].ToString();
                    mcc.MALM = row["MALM"].ToString();
                    mcc.MAMCC = row["MAMCC"].ToString();
                    mcc.MATD = row["MATD"].ToString();
                    mcc.PASSWORD = row["PASSWORD"].ToString();
                    mcc.PORT = row["PORT"].ToString();
                    mcc.SeriNumber = row["SeriNumber"].ToString();
                    mcc.SODANGKI = row["SODANGKI"].ToString();
                    mcc.TENMAY = row["TENMAY"].ToString();
                    mcc.TONGSOMATMA = int.Parse(row["TONGSOMATMA"].ToString());
                    mcc.TONGSONHANVIEN = int.Parse(row["TONGSONHANVIEN"].ToString());
                    mcc.TONGSOVANTAY = int.Parse(row["TONGSOVANTAY"].ToString());
                    dsmaychamcong.Add(mcc);
                }
            }
            else
            {
                frmHoidap f = new frmHoidap("Không có dữ liệu!", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                f.ShowDialog();
            }
        }
        void CreateConection(MAYCHAMCONG mcc)
        {
            if (mcc.MALKN == "COM")
            {
                Connection(ConnectType.COM, mcc.ISDOMAIN, mcc);
            }
            else if (mcc.MALKN == "TCP")
            {
                Connection(ConnectType.TCP, mcc.ISDOMAIN, mcc);
            }
            else if (mcc.MALKN == "USB")
            {
                Connection(ConnectType.USB, mcc.ISDOMAIN, mcc);
            }
        }
        bool CheckSeriAl(string serial)
        {
            mahoa.mahoa mh = new mahoa.mahoa();
            serimahoa = mh.mahoadulieu(seri, false, "thanhthuy");
            if (!Common.IsExists(Application.StartupPath + @"\" + serimahoa + ".GDT"))
            {
                ActiveToolbar();
                thongbao = new frmHoidap("Máy không đúng hoặc chưa được đăng ký vui lòng kiểm tra lại", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                thongbao.ShowDialog();
                return false;
            }
            else
            {
                return true;
            }
        }
        string TypeOfSoure(long type)
        {
            string OriginType = "";
            if ((type <= 5) && (type >= 0))
            {
                switch (((int)type))
                {
                    case 0:
                        OriginType = "I";
                        break;
                    case 1:
                        OriginType = "O";
                        break;
                    case 2:
                        OriginType = "BO";
                        break;
                    case 3:
                        OriginType = "BI";
                        break;
                    case 4:
                        OriginType = "OTI";
                        break;
                    case 5:
                        OriginType = "OTO";
                        break;
                }
            }
            
                return OriginType;
        }
        DateTime Getdatetime(int year, int month, int day)
        {
            DateTime ngay = new DateTime(year, month, day);
            return ngay;
        }
        DateTime GetDateTimeHour(int year, int month, int day, int hour, int minute, int second)
        {
            DateTime ngay = new DateTime(year, month, day, hour, minute, second);
            return ngay;
        }
        string Mode(int dwMode)
        {
            string Mode = "";
            if (dwMode == 1)
                Mode = "FP";
            else
            {
                Mode = "PW";
            }
            return Mode;
        }
        public void DowloadALL()
        {
            try
            {
                int dwDay = 0;
                int dwMinute = 0;
                int dwMonth = 0;
                int dwWorkCode = 0;
                int num = 0;
                int dwSecond = 0;
                int dwValue = 0;
                object obj2 = 1;
                int tongsomay = Tongsomay(); 
                string sdwEnrollNumber = "";
                int dwHour = 0;
                int dwYear = 0;
                int dwInOutMode = 0;
                int dwVerifyMode = 0;
                ds = new CheckInOutCollection();
                DataTable danhsachmay = MAYCHAMCONGBUS.SelectAll(null);
                ConvertData(danhsachmay);
                //hien thi cho
                frmwaiting f = new frmwaiting();
                f.StartPosition = FormStartPosition.CenterScreen;
                f.Show();
                Application.DoEvents();
                foreach (MAYCHAMCONG cc in dsmaychamcong)
                {
                    f.lbgoi.Text = "Đang gọi máy " + cc.IDMAY.ToString() + "......";
                    //tao ket noi
                    CreateConection(mcc);
                    if (IsConnect)//neu connect thanh cong
                    {
                        AxCZKEM1.GetSerialNumber(mcc.IDMAY, out seri);
                        if (!CheckSeriAl(seri))
                        {
                            f.Close();
                            AxCZKEM1.Disconnect();
                            continue;
                        }
                        else
                        {
                            AxCZKEM1.GetDeviceStatus(cc.IDMAY, 6, ref dwValue);
                            if (dwValue == 0)
                            {
                                f.lbgoi.Text = "Chưa có dữ liệu chấm công của" + cc.IDMAY.ToString();
                                Application.DoEvents();
                                AxCZKEM1.Disconnect();
                                Until.Delay(3);
                                continue;
                            }
                            else
                            {
                                f.lbgoi.Text = "Reading Record " + cc.IDMAY.ToString();
                                Application.DoEvents();
                                AxCZKEM1.EnableDevice(cc.IDMAY, false);
                                bool flag = AxCZKEM1.ReadGeneralLogData(cc.IDMAY);
                                AxCZKEM1.EnableDevice(cc.IDMAY, true);
                                if (!flag)
                                {
                                    thongbao = new frmHoidap("Lỗi đọc dữ liệu " + cc.IDMAY.ToString(), frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                                    thongbao.ShowDialog();
                                    Application.DoEvents();
                                    Until.Delay(3);
                                    AxCZKEM1.Disconnect();
                                    continue;
                                }
                                else
                                {
                                    f.tocdo.Visible = true;
                                    f.tocdo.Maximum = dwValue;
                                    f.tocdo.Value = 0;
                                    f.lbgoi.Text = "Đang duyệt máy " + cc.IDMAY.ToString() + f.tocdo.Value.ToString() + "%";
                                    Application.DoEvents();
                                    if (AxCZKEM1.IsTFTMachine(cc.IDMAY))
                                    {
                                        for (int i = 0; i < dwValue; i++)
                                        {
                                            if (AxCZKEM1.SSR_GetGeneralLogData(mcc.IDMAY, out sdwEnrollNumber, out dwVerifyMode, out dwInOutMode, out dwYear, out dwMonth, out dwDay, out dwHour, out dwMinute, out dwSecond, ref dwWorkCode))
                                            {
                                                inout = new CheckInOut();
                                                inout.UserEnrollNumber = Conversions.ToInteger(sdwEnrollNumber);
                                                inout.TimeDate = Getdatetime(dwYear, dwMonth, dwDay);
                                                inout.TimeStr = GetDateTimeHour(dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond);
                                                inout.OriginType= TypeOfSoure(dwInOutMode);
                                                inout.Source = Mode(dwVerifyMode);
                                                inout.MachineNo = cc.IDMAY;
                                                ds.Add(inout);//nap du lieu 
                                                ///thuc hien dem tiep
                                                f.tocdo.Visible = true;
                                                f.tocdo.Maximum = dwValue;
                                                f.tocdo.Value = num;
                                                f.lbgoi.Text = "Đang duyệt máy" + cc.IDMAY.ToString() + f.tocdo.Value.ToString() + "%";
                                                Application.DoEvents();
                                                num++;
                                            }
                                        }
                                    }
                                    else
                                    {
                                        int dwMACCM = 0;
                                        int somay = mcc.IDMAY;
                                        num = 0;
                                        for (int j = 0; j < dwValue; j++)
                                        {
                                            if (AxCZKEM1.GetGeneralLogData(somay, ref somay, ref dwMACCM, ref somay, ref dwVerifyMode, ref dwInOutMode, ref dwYear, ref dwMonth, ref dwDay, ref dwHour, ref dwMinute))
                                            {
                                                inout = new CheckInOut();
                                                inout.UserEnrollNumber = dwMACCM;
                                                inout.TimeDate = Getdatetime(dwYear, dwMonth, dwDay);
                                                inout.TimeStr = GetDateTimeHour(dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond);
                                                inout.OriginType = TypeOfSoure(dwInOutMode); 
                                                inout.Source = Conversions.ToString(Interaction.IIf(dwVerifyMode == 1L, "FP", "PW"));
                                                inout.MachineNo = mcc.IDMAY;
                                                ds.Add(inout);
                                                f.tocdo.Visible = true;
                                                f.tocdo.Maximum = dwValue;
                                                f.tocdo.Value = num;
                                                f.lbgoi.Text = "Đang duyệt máy " + mcc.IDMAY.ToString() + f.tocdo.Value.ToString() + "%";
                                                Application.DoEvents();
                                                num++;
                                            }
                                        }

                                    }
                                    //thuc hien viec tao bang 
                                    CreateTableTableInout(ds);
                                    ActiveToolbar();
                                }
                            }
                        }
                    }
                    if (!IsConnect)
                    {
                        f.Close();
                        thongbao = new frmHoidap("Không thể mở kết nối đến " + cc.IDMAY.ToString() + "vui lòng kiểm tra lại", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                        thongbao.ShowDialog();
                        AxCZKEM1.Disconnect();
                        ActiveToolbar();
                    }
                    num = 0;
                    f.Close();
                    AxCZKEM1.Disconnect();

                }
            }
            catch (Exception ex)
            {
                thongbao = new frmHoidap("Có lỗi :" + ex.Message.ToString(), frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                thongbao.ShowDialog();
                AxCZKEM1.Disconnect();
                ActiveToolbar();
            }
        }
        public void DownloadOne()
        {
            try
            {
                int dwInOutMode = 0;
                int dwVerifyMode = 0;
                string dwMACCM = "0";
                int dwYear = 0;
                int dwMonth = 0;
                int dwDay = 0;
                int dwhour = 0;
                int dwMinute = 0;
                int dwSecond = 0;
                int dwWorkCode = 0;
                int dwValue = 0;
                object obj2 = 1;
                int num = 0;
                if (!String.IsNullOrEmpty(mamay))
                {
                    if (mamay.Trim() == "-1")
                    {
                        thongbao = new frmHoidap("Bạn vui lòng chọn máy cụ thể!", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.canhbao);
                        thongbao.ShowDialog();
                    }
                    else
                    {
                        DataTable dt = new DataTable();
                        mcc = new MAYCHAMCONG();
                        mcc.MAMCC = mamay;
                        dt = MAYCHAMCONGBUS.SelectPK(mcc);
                        if (dt.Rows.Count != 0)
                        {
                            mcc = new MAYCHAMCONG();
                            DataTableToMaychamcong(ref mcc, dt);
                            frmwaiting f = new frmwaiting();
                            f.StartPosition = FormStartPosition.CenterScreen;
                            f.lbgoi.Text = "Đang gọi máy " + mcc.IDMAY.ToString() + ".....";
                            f.Show();
                            Application.DoEvents();
                            CreateConection(mcc);
                            if (IsConnect)
                            {
                                // kiem tra sem da dang ky chua
                                AxCZKEM1.GetSerialNumber(mcc.IDMAY, out seri);
                                if (!CheckSeriAl(seri))
                                {
                                       f.Close();
                                       AxCZKEM1.Disconnect();
                                }
                                else
                                {
                                    ds = new CheckInOutCollection();
                                    AxCZKEM1.GetDeviceStatus(mcc.IDMAY, 6, ref dwValue);
                                    if (dwValue == 0)
                                    {
                                        f.Close();
                                        thongbao = new frmHoidap("Máy " + mcc.IDMAY.ToString() + " chưa có dữ liệu !", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                                        thongbao.ShowDialog();
                                        AxCZKEM1.Disconnect();
                                        ActiveToolbar();
                                    }
                                    else
                                    {
                                        f.lbgoi.Text = "Reading Record of " + mcc.IDMAY.ToString();
                                        Application.DoEvents();
                                        AxCZKEM1.EnableDevice(mcc.IDMAY, false);
                                        bool flag = AxCZKEM1.ReadGeneralLogData(mcc.IDMAY);
                                        AxCZKEM1.EnableDevice(mcc.IDMAY, true);
                                        if (!flag)
                                        {
                                            thongbao = new frmHoidap("Read Error!", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                                            thongbao.ShowDialog();
                                            Application.DoEvents();
                                            Until.Delay(3);
                                            AxCZKEM1.Disconnect();
                                            f.Close();
                                            ActiveToolbar();
                                        }
                                        else
                                        {
                                            f.tocdo.Visible = true;
                                            f.tocdo.Maximum = dwValue;
                                            f.tocdo.Value = 0;
                                            f.lbgoi.Text = "Reading machine " + mcc.IDMAY.ToString() + f.tocdo.Value.ToString() + " %";
                                            Application.DoEvents();
                                            if (AxCZKEM1.IsTFTMachine(mcc.IDMAY))//neu la tft 
                                            {
                                                for (int i = 0; i < dwValue; i++)
                                                {
                                                    if (AxCZKEM1.SSR_GetGeneralLogData(mcc.IDMAY, out dwMACCM, out dwInOutMode, out dwVerifyMode, out dwYear, out dwMonth, out dwDay, out dwhour, out dwMinute, out dwSecond, ref dwWorkCode))
                                                    {
                                                        inout = new CheckInOut();
                                                        inout.UserEnrollNumber = Conversions.ToInteger(dwMACCM);
                                                        inout.TimeDate = Getdatetime(dwYear,dwMonth,dwDay);
                                                        inout.TimeStr = GetDateTimeHour(dwYear, dwMonth, dwDay, dwhour, dwMinute, dwSecond);
                                                        inout.OriginType = TypeOfSoure(dwVerifyMode);
                                                        inout.Source = Mode(dwInOutMode);
                                                        inout.MachineNo = mcc.IDMAY;
                                                        ds.Add(inout);
                                                        f.tocdo.Visible = true;
                                                        f.tocdo.Maximum = dwValue;
                                                        f.tocdo.Value = i;
                                                        f.lbgoi.Text = f.tocdo.Value.ToString() + " %";
                                                        Application.DoEvents();
                                                    }
                                                }
                                            }
                                            else    //neu khong phai la máy tft
                                            {
                                                int somay = mcc.IDMAY;
                                                int dwMACC = int.Parse(dwMACCM);
                                                for (int j = 0; j < dwValue; j++)
                                                {
                                                    if (AxCZKEM1.GetGeneralLogData(mcc.IDMAY, ref somay, ref dwMACC, ref somay, ref dwVerifyMode, ref dwInOutMode, ref dwYear, ref dwMonth, ref dwDay, ref dwhour, ref dwMinute))
                                                    {
                                                        inout = new CheckInOut();
                                                        inout.UserEnrollNumber = Conversions.ToInteger(dwMACCM);
                                                        inout.TimeDate = Getdatetime(dwYear, dwMonth, dwDay);
                                                        inout.TimeStr = GetDateTimeHour(dwYear, dwMonth, dwDay, dwhour, dwMinute, dwSecond);
                                                        inout.OriginType = TypeOfSoure(dwVerifyMode);
                                                        inout.Source = Mode(dwInOutMode);
                                                        inout.MachineNo = mcc.IDMAY;
                                                        ds.Add(inout);
                                                        f.tocdo.Visible = true;
                                                        f.lbphantram.Visible = true;
                                                        f.tocdo.Maximum = dwValue;
                                                        f.tocdo.Value = num;
                                                        f.lbphantram.Text = f.tocdo.Value.ToString() + "%";
                                                        f.lbgoi.Text = "Reading machine " + mcc.IDMAY.ToString();
                                                        Application.DoEvents();
                                                        num++;
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            if (!IsConnect)
                            {
                                f.Close();
                                f.Dispose();
                                ActiveToolbar();
                                thongbao = new frmHoidap("Không thể mở kết nối đến " + mcc.IDMAY.ToString() + "vui lòng kiểm tra lại", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                                thongbao.ShowDialog();
                            }
                            f.Close();
                            num = 0;
                            AxCZKEM1.Disconnect();
                        }
                    }
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
            finally
            {
                CreateTableTableInout(ds);
            }
            
        }
        private void CreateTableTableInout(CheckInOutCollection ch)
        {
            try
            {
                DataTable dt = new DataTable("INOUT");
                DataColumn STT = new DataColumn("STT", typeof(string));
                DataColumn MachineNo = new DataColumn("MachineNo", typeof(string));
                DataColumn UserEnrollNumber = new DataColumn("UserEnrollNumber", typeof(string));
                DataColumn Source = new DataColumn("Source", typeof(string));
                DataColumn TimeDate = new DataColumn("TimeDate", typeof(string));
                DataColumn TimeStr = new DataColumn("TimeStr", typeof(string));
                DataColumn OriginType = new DataColumn("OriginType", typeof(string));
                dt.Columns.AddRange(new DataColumn[] { STT, MachineNo, UserEnrollNumber, Source, TimeDate, TimeStr, OriginType });
                int i = 1;
                foreach (CheckInOut c in ch)
                {
                    DataRow dr = dt.NewRow();
                    dr["STT"] = i.ToString();
                    dr["MachineNo"] = c.MachineNo.ToString();
                    dr["OriginType"] = c.OriginType.ToString();
                    dr["Source"] = c.Source.ToString();
                    dr["TimeDate"] = c.TimeDate.ToString();
                    dr["TimeStr"] = c.TimeStr.ToString();
                    dr["UserEnrollNumber"] = c.UserEnrollNumber.ToString();
                    dt.Rows.Add(dr);
                    i++;
                }
                this.dgvdanhsach.DataSource = dt;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
        }
        public Total UcStatusRoom { get; set; }
        public void ReloadStattus()
        {
            Thongke tk = new Thongke();
            this.UcStatusRoom.DtData = BAOCAOBUS.ThongkeTotal(tk);
            this.UcStatusRoom.Settext();
        }
        private void toolbarMayChamCong1_Download()
        {
            this.toolbarMayChamCong1.SetEnableButton(false, false, false, false, true, false, false, false, true);
            if (DateTime.Compare(dtpdenngay.Value, dtptungay.Value) > 0)
            {
                if (!String.IsNullOrEmpty(mamay))
                {
                    flag = 1;
                    if (mamay.Trim() == "-1")
                    {
                        DowloadALL();
                        ReloadStattus();
                    }
                    else
                    {
                        DownloadOne();
                        ReloadStattus();
                    }

                }
            }
            else
            {
                frmHoidap f = new frmHoidap("Không thể chọn ngày kết thúc nhỏ hơn ngày bắt đầu", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                f.ShowDialog();
                this.toolbarMayChamCong1.SetEnableButton(true, false, true, true, false, true, true, true, true);
            }
            
        }
        private void Connection(ConnectType type, bool isdomain, MAYCHAMCONG mcc)
        {
            if (type == ConnectType.COM)
            {
                /// doc toc do may
                DataTable tocdo = new DataTable();
                TOCDO td = new TOCDO();
                td.MATD = mcc.MATD;
                tocdo = TOCDOBUS.SelectPK(td);
                int tocdocom = 0;
                foreach (DataRow rowtocdo in tocdo.Rows)
                {
                    tocdocom = int.Parse(rowtocdo["TENTOCDO"].ToString());
                    break;
                }
                this.IsConnect = AxCZKEM1.Connect_Com(mcc.COMPORT, mcc.IDMAY, tocdocom);
            }
            else if (type == ConnectType.TCP)
            {
                if (mcc.ISDOMAIN)
                {
                    this.IsConnect = AxCZKEM1.Connect_Net(mcc.DOMAIN, int.Parse(mcc.PORT));
                }
                else
                {
                    this.IsConnect = AxCZKEM1.Connect_Net(mcc.IP, int.Parse(mcc.PORT));
                }
            }
            else if (type == ConnectType.USB)
            {
                this.IsConnect = AxCZKEM1.Connect_USB(mcc.IDMAY);
            }
        }
        void ActiveToolbar()
        {
            this.toolbarMayChamCong1.SetEnableButton(true, false, true, true, true, true, true, true, true);
        }
        private void Taidulieutheongay_Load(object sender, EventArgs e)
        {
            ActiveToolbar();
            LoadAllMAY();
            SetLink();
        }
        void LoadAllMAY()
        {
            DataTable dt = new DataTable();
            dt = MAYCHAMCONGBUS.SelectAll(null);
            this.toolbarMayChamCong1.DataLoaiMay = dt;
            this.toolbarMayChamCong1.DisplayMember = "TENMAY";
            this.toolbarMayChamCong1.ValuesMember = "MAMCC";
            this.toolbarMayChamCong1.AddDataForCMB();
        }
        private void toolbarMayChamCong1_ChangeMachine()
        {
            mamay = this.toolbarMayChamCong1.SelectValue;
        }
        private void DataTableToMaychamcong(ref MAYCHAMCONG mcc, DataTable dt)
        {

            if (dt.Rows.Count != 0)
            {
                foreach (DataRow row in dt.Rows)
                {
                    mcc = new MAYCHAMCONG();
                    mcc.COMPORT = int.Parse(row["COMPORT"].ToString());
                    mcc.DOMAIN = row["DOMAIN"].ToString();
                    mcc.FIMWARE = row["FIMWARE"].ToString();
                    mcc.IDMAY = int.Parse(row["IDMAY"].ToString());
                    mcc.IP = row["IP"].ToString();
                    if (row["ISDOMAIN"].ToString() == "USE")
                        mcc.ISDOMAIN = true;
                    else
                        mcc.ISDOMAIN = false;
                    mcc.MALKN = row["MALKN"].ToString();
                    mcc.MALM = row["MALM"].ToString();
                    mcc.MAMCC = row["MAMCC"].ToString();
                    mcc.MATD = row["MATD"].ToString();
                    mcc.PASSWORD = row["PASSWORD"].ToString();
                    mcc.PORT = row["PORT"].ToString();
                    mcc.SeriNumber = row["SeriNumber"].ToString();
                    mcc.SODANGKI = row["SODANGKI"].ToString();
                    mcc.TENMAY = row["TENMAY"].ToString();
                    mcc.TONGSOMATMA = int.Parse(row["TONGSOMATMA"].ToString());
                    mcc.TONGSONHANVIEN = int.Parse(row["TONGSONHANVIEN"].ToString());
                    mcc.TONGSOVANTAY = int.Parse(row["TONGSOVANTAY"].ToString());
                }
            }
            else
            {
                frmHoidap f = new frmHoidap("Không có dữ liệu!", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                f.ShowDialog();
            }
        }
        private void toolbarMayChamCong1_Clock()
        {
            try
            {
                if (!String.IsNullOrEmpty(mamay))
                {
                    if (mamay.Trim() == "-1")
                    {
                        thongbao = new frmHoidap("Bạn vui lòng chọn máy cụ thể!", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.canhbao);
                        thongbao.ShowDialog();
                    }
                    else
                    {

                        DataTable dt = new DataTable();
                        mcc = new MAYCHAMCONG();
                        mcc.MAMCC = mamay;
                        dt = MAYCHAMCONGBUS.SelectPK(mcc);
                        if (dt.Rows.Count != 0)
                        {
                            mcc = new MAYCHAMCONG();
                            DataTableToMaychamcong(ref mcc, dt);
                            frmwaiting f = new frmwaiting();
                            f.StartPosition = FormStartPosition.CenterScreen;
                            f.lbgoi.Text = "Đang gọi máy " + mcc.IDMAY.ToString() + ".....";
                            f.Show();
                            Application.DoEvents();
                            CreateConection(mcc);
                            if (IsConnect)
                            {
                                AxCZKEM1.GetSerialNumber(mcc.IDMAY, out seri);
                                if (!CheckSeriAl(seri))
                                {
                                    f.Close();
                                    AxCZKEM1.Disconnect();
                                }
                                else
                                {
                                    int num = 0;
                                    int num2 = 0;
                                    int num3 = 0;
                                    int num4 = 0;
                                    int num5 = 0;
                                    int num6 = 0;
                                    if (!AxCZKEM1.GetDeviceTime(mcc.IDMAY, ref num6, ref num3, ref num, ref num2, ref num4, ref num5))
                                    {
                                        f.Close();
                                        thongbao = new frmHoidap("Không thể mở kết nối đến " + mcc.IDMAY.ToString() + "vui lòng kiểm tra lại", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                                        thongbao.ShowDialog();
                                    }
                                    else
                                    {
                                        f.Close();
                                        f.Dispose();
                                        DateTime dateValue = Conversions.ToDate(Conversions.ToString(num6) + "-" + Conversions.ToString(num3) + "-" + Conversions.ToString(num) + " " + Conversions.ToString(num2) + ":" + Conversions.ToString(num4) + ":" + Conversions.ToString(num5));
                                        string str = Until.LayThu(DateAndTime.Weekday(dateValue, FirstDayOfWeek.Sunday));
                                        thongbao = new frmHoidap(mcc.IDMAY + ":" + str + ", " + Conversions.ToString(dateValue), frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                                        thongbao.ShowDialog();
                                        AxCZKEM1.Disconnect();
                                    }
                                }
                            }
                            if (!IsConnect)
                            {
                                f.Close();
                                f.Dispose();
                                ActiveToolbar();
                                thongbao = new frmHoidap("Không thể mở kết nối đến " + mcc.IDMAY.ToString() + "vui lòng kiểm tra lại", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                                thongbao.ShowDialog();
                            }

                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
        }
        private void toolbarMayChamCong1_Syssnc()
        {
            try
            {
                int dwYear = DateAndTime.Year(DateAndTime.Now);
                int dwMonth = DateAndTime.Month(DateAndTime.Now);
                int dwDay = DateAndTime.Day(DateAndTime.Now);
                int dwHour = DateAndTime.Hour(DateAndTime.Now);
                int dwMinute = DateAndTime.Minute(DateAndTime.Now);
                int dwSecond = DateAndTime.Second(DateAndTime.Now);
                if (!String.IsNullOrEmpty(mamay))
                {
                    if (mamay.Trim() == "-1")
                    {
                        thongbao = new frmHoidap("Bạn vui lòng chọn máy cụ thể!", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.canhbao);
                        thongbao.ShowDialog();
                    }
                    else
                    {
                        DataTable dt = new DataTable();
                        mcc = new MAYCHAMCONG();
                        mcc.MAMCC = mamay;
                        dt = MAYCHAMCONGBUS.SelectPK(mcc);
                        if (dt.Rows.Count != 0)
                        {
                            mcc = new MAYCHAMCONG();
                            DataTableToMaychamcong(ref mcc, dt);
                            frmwaiting f = new frmwaiting();
                            f.StartPosition = FormStartPosition.CenterScreen;
                            f.Show();
                            f.lbgoi.Text = "Đang gọi máy " + mcc.IDMAY.ToString() + ".....";
                            Application.DoEvents();
                            CreateConection(mcc);
                            if (IsConnect)
                            {
                                AxCZKEM1.GetSerialNumber(mcc.IDMAY, out seri);
                                if (!CheckSeriAl(seri))
                                {
                                    f.Close();
                                    AxCZKEM1.Disconnect();
                                }
                                else
                                {
                                    if (!AxCZKEM1.SetDeviceTime2(mcc.IDMAY, dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond))
                                    {
                                        f.Close();
                                        thongbao = new frmHoidap("Không thể đồng bộ thời gian với " + mcc.IDMAY.ToString() + "vui lòng kiểm tra lại", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                                        thongbao.ShowDialog();
                                    }
                                    else
                                    {
                                        f.Close();
                                        thongbao = new frmHoidap("Đồng bộ thời gian với " + mcc.IDMAY.ToString() + "thành công!", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.thongtin);
                                        thongbao.ShowDialog();
                                    }
                                }

                            }
                            if (!IsConnect)
                            {
                                f.Close();
                                f.Dispose();
                                ActiveToolbar();
                                thongbao = new frmHoidap("Không thể mở kết nối đến " + mcc.IDMAY.ToString() + "vui lòng kiểm tra lại", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                                thongbao.ShowDialog();
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }

        }
        private void toolbarMayChamCong1_Restart()
        {
            try
            {
                if (!String.IsNullOrEmpty(mamay))
                {
                    if (mamay.Trim() == "-1")
                    {
                        thongbao = new frmHoidap("Bạn vui lòng chọn máy cụ thể!", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.canhbao);
                        thongbao.ShowDialog();
                    }
                    else
                    {

                        DataTable dt = new DataTable();
                        mcc = new MAYCHAMCONG();
                        mcc.MAMCC = mamay;
                        dt = MAYCHAMCONGBUS.SelectPK(mcc);
                        if (dt.Rows.Count != 0)
                        {
                            mcc = new MAYCHAMCONG();
                            DataTableToMaychamcong(ref mcc, dt);
                            frmwaiting f = new frmwaiting();
                            f.StartPosition = FormStartPosition.CenterScreen;
                            f.Show();
                            f.lbgoi.Text = "Đang gọi máy " + mcc.IDMAY.ToString() + ".....";
                            Application.DoEvents();
                            CreateConection(mcc);
                            if (IsConnect)
                            {
                                AxCZKEM1.GetSerialNumber(mcc.IDMAY, out seri);
                                if (!CheckSeriAl(seri))
                                {
                                    f.Close();
                                    AxCZKEM1.Disconnect();
                                }
                                else
                                {
                                    if (!AxCZKEM1.RestartDevice(mcc.IDMAY))
                                    {
                                        f.Close();
                                        ActiveToolbar();
                                        thongbao = new frmHoidap("Không thể khởi động lại máy " + mcc.IDMAY.ToString() + "vui lòng kiểm tra lại", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                                        thongbao.ShowDialog();
                                        AxCZKEM1.Disconnect();
                                    }
                                    else
                                    {
                                        f.Close();
                                        thongbao = new frmHoidap(mcc.IDMAY + "Khởi động lại thành công!", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                                        thongbao.ShowDialog();
                                        AxCZKEM1.Disconnect();
                                        ActiveToolbar();
                                    }
                                }
                            }
                            if (!IsConnect)
                            {
                                f.Close();
                                ActiveToolbar();
                                thongbao = new frmHoidap("Không thể mở kết nối đến " + mcc.IDMAY.ToString() + "vui lòng kiểm tra lại", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                                thongbao.ShowDialog();

                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
        }
        private void toolbarMayChamCong1_Remove()
        {
            // xóa dữ liệu chấm công trên máy
            try
            {
                if (!String.IsNullOrEmpty(mamay))
                {
                    if (mamay.Trim() == "-1")
                    {
                        thongbao = new frmHoidap("Bạn vui lòng chọn máy cụ thể!", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.canhbao);
                        thongbao.ShowDialog();
                    }
                    else
                    {
                        DataTable dt = new DataTable();
                        mcc = new MAYCHAMCONG();
                        mcc.MAMCC = mamay;
                        dt = MAYCHAMCONGBUS.SelectPK(mcc);
                        DataTableToMaychamcong(ref mcc,dt);
                        if (dt.Rows.Count != 0)
                        {
                            thongbao = new frmHoidap("Bạn muốn xóa dữ liệu chấm công ở máy " + mcc.IDMAY.ToString() + "?", frmHoidap.CO.hien, frmHoidap.KHONG.hien, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                            if (thongbao.ShowDialog() == DialogResult.Yes)
                            {
                                frmwaiting f = new frmwaiting();
                                f.StartPosition = FormStartPosition.CenterScreen;
                                f.lbgoi.Text = "Đang gọi máy " + mcc.IDMAY.ToString() + ".....";
                                f.Show();
                                Application.DoEvents();
                                CreateConection(mcc);
                                if (IsConnect)
                                {
                                    AxCZKEM1.GetSerialNumber(mcc.IDMAY, out seri);
                                    if (!CheckSeriAl(seri))
                                    {
                                        f.Close();
                                        AxCZKEM1.Disconnect();
                                    }
                                    else
                                    {
                                        if (!AxCZKEM1.ClearGLog(mcc.IDMAY))
                                        {
                                            f.Close();
                                            ActiveToolbar();
                                            thongbao = new frmHoidap("Lỗi! không thể xóa log của máy " + mcc.IDMAY.ToString() + "\n vui lòng kiểm tra lại", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                                            thongbao.ShowDialog();
                                        }
                                        else
                                        {
                                            f.Close();
                                            ActiveToolbar();
                                            thongbao = new frmHoidap("Xóa log của máy " + mcc.IDMAY.ToString() + "thành công!", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                                            thongbao.ShowDialog();
                                        }
                                    }
                                       
                                }
                                if (!IsConnect)
                                {
                                    f.Close();
                                    ActiveToolbar();
                                    thongbao = new frmHoidap("Không thể mở kết nối đến " + mcc.IDMAY.ToString() + "vui lòng kiểm tra lại", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                                    thongbao.ShowDialog();
                                }
                            }
                            else
                            {
                                ActiveToolbar();
                            }
                        }
                    }
                }

            }
            catch (Exception ex)
            {
                thongbao = new frmHoidap("Lỗi " + ex.Message.ToString() , frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                thongbao.ShowDialog();
                AxCZKEM1.Disconnect();
            }
        }
        private void toolbarMayChamCong1_Delete()
        {
            try
            {
                if (!String.IsNullOrEmpty(mamay))
                {
                    if (mamay.Trim() == "-1")
                    {
                        thongbao = new frmHoidap("Bạn vui lòng chọn máy cụ thể!", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.canhbao);
                        thongbao.ShowDialog();
                    }
                    else
                    {
                        DataTable dt = new DataTable();
                        mcc = new MAYCHAMCONG();
                        mcc.MAMCC = mamay;
                        dt = MAYCHAMCONGBUS.SelectPK(mcc);
                        DataTableToMaychamcong(ref mcc, dt);
                        if (dt.Rows.Count != 0)
                        {
                            thongbao = new frmHoidap("Bạn muốn  xóa toàn bộ dữ liệu lưu trữ ở máy " + mcc.IDMAY.ToString() + "?", frmHoidap.CO.hien, frmHoidap.KHONG.hien, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                            if (thongbao.ShowDialog() == DialogResult.Yes)
                            {
                                frmwaiting f = new frmwaiting();
                                f.StartPosition = FormStartPosition.CenterScreen;
                                f.lbgoi.Text = "Đang gọi máy " + mcc.IDMAY.ToString() + ".....";
                                f.Show();
                                Application.DoEvents();
                                CreateConection(mcc);
                                if (IsConnect)
                                {
                                    AxCZKEM1.GetSerialNumber(mcc.IDMAY, out seri);
                                    if (!CheckSeriAl(seri))
                                    {
                                        f.Close();
                                        AxCZKEM1.Disconnect();
                                    }
                                    else
                                    {
                                        if (!AxCZKEM1.ClearKeeperData(mcc.IDMAY))
                                        {
                                            f.Close();
                                            ActiveToolbar();
                                            thongbao = new frmHoidap("lỗi! Không thể xóa toàn bộ dữ liệu lưu trữ  của máy " + mcc.IDMAY.ToString() + "vui lòng kiểm tra lại", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                                            thongbao.ShowDialog();
                                        }
                                        else
                                        {
                                            f.Close();
                                            ActiveToolbar();
                                            thongbao = new frmHoidap("Xóa toàn bộ dữ liệu máy " + mcc.IDMAY.ToString() + " thành công!", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                                            thongbao.ShowDialog();
                                        }
                                    }

                                }
                                if (!IsConnect)
                                {
                                    f.Close();
                                    ActiveToolbar();
                                    thongbao = new frmHoidap("Không thể mở kết nối đến " + mcc.IDMAY.ToString() + "vui lòng kiểm tra lại", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                                    thongbao.ShowDialog();
                                }
                            }
                            else
                            {
                                ActiveToolbar();
                            }
                        }
                    }
                }

            }
            catch (Exception ex)
            {
                thongbao = new frmHoidap("Lỗi " + ex.Message.ToString(), frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                thongbao.ShowDialog();
            }

        }
        private void SetLink()
        {
            this.links1.SetValues("Máy", "Dữ liệu chấm công");
        }
        private void Copy(CheckInOutCollection dsin, CHAMCONGCollection dsout)
        {
            foreach (CheckInOut c in dsin)
            {
                CHAMCONG cc = new CHAMCONG();
                cc.IDMAY = c.MachineNo;
                cc.LOAI = c.OriginType;
                cc.MACCM = c.UserEnrollNumber.ToString();
                cc.MANV = null;
                cc.NGAY = c.TimeDate;
                cc.NGAYGIO = c.TimeStr;
                cc.NGUON = c.Source;
                dsout.Add(cc);
            }
        }
        private void toolbarMayChamCong1_Save()
        {
            if (flag == 1 && dgvdanhsach.Rows.Count != 0)
            { 
                if (ds.Count!=0)
                {
                    // thuc hien copy nguon du lieu
                    CHAMCONGCollection dsout =new   CHAMCONGCollection();
                    Copy(ds, dsout);
                    //thuc hien insert du lieu 
                    bool IsComplete = true;
                    foreach (CHAMCONG cham in dsout)
                    { 
                        IsComplete=CHAMCONGBUS.Insert(cham);
                    }
                    if (IsComplete)
                    {
                        thongbao = new frmHoidap("Thêm dữ liệu chấm công thành công!", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.thongtin);
                        thongbao.ShowDialog();
                        this.toolbarMayChamCong1.SetEnableButton(true, false, true, true, false, true, true, true, true);
                    } 
                    else
                    {
                        thongbao = new frmHoidap("Có lỗi xảy ra trong quá trình thêm dữ liệu chấm công !", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                        thongbao.ShowDialog();
                        this.toolbarMayChamCong1.SetEnableButton(true, false, true, true, false, true, true, true, true);
                    }
                } 
                else
                {
                    thongbao = new frmHoidap("Không có dữ liệu chấm công!", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                    thongbao.ShowDialog();
                    this.toolbarMayChamCong1.SetEnableButton(true, false, true, true, false, true, true, true, true);
                }
            }
        }
        public delegate void _Close();
        public event _Close Close;
        private void toolbarMayChamCong1_Exit()
        {
            if (this.Close != null)
                this.Close();
        }
    }
}
